﻿/*
数组的每个下标作为一个阶梯，第 i 个阶梯对应着一个非负数的体力花费值 cost[i]（下标从 0 开始）。

每当爬上一个阶梯都要花费对应的体力值，一旦支付了相应的体力值，就可以选择向上爬一个阶梯或者爬两个阶梯。

请找出达到楼层顶部的最低花费。在开始时，你可以选择从下标为 0 或 1 的元素作为初始阶梯。

 

示例 1：

输入：cost = [10, 15, 20]
输出：15
解释：最低花费是从 cost[1] 开始，然后走两步即可到阶梯顶，一共花费 15 。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/GzCJIP
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/

// 这题挺难理解的，楼顶是指cost.size()

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int f[1010];
        f[0] = 0, f[1] = 0;
        for (int i = 2; i <= cost.size(); ++i)
        {
            f[i] = min(f[i - 1] + cost[i - 1], f[i - 2] + cost[i - 2]);
        }
        return f[cost.size()];
    }
};


